package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.Instancia;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="instanciaFaces")
@ViewScoped
public class InstanciaFaces extends FacesUtil {
	
	private static final long serialVersionUID = -7977605925364598025L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<Instancia> logicaInstancia;
	
	private Instancia instancia = new Instancia();
	private List<Instancia> listaInstancia = new ArrayList<>();
	private String instanciaBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaInstancia.adicionar(instancia);
				adicionarMensagem("Instância adicionada com sucesso");
				this.buscarInstancia();
				fecharModal("dialogInstancia");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar a Instância");
		}
	}
	
	public void prepararAdicionar() {
		this.instancia = new Instancia();
		abrirModal("dialogInstancia");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.instancia = logicaInstancia.obterPorId(Instancia.class,idArea);
			
			if (editar) {
				abrirModal("dialogInstancia");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaInstancia.editar(this.instancia);
				adicionarMensagem("Instância editada com sucesso");
				fecharModal("dialogInstancia");
				this.buscarInstancia();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar a Instância");
		}
	}
	
	public void remover() {
		try {
			logicaInstancia.remover(Instancia.class, this.instancia.getId());
			adicionarMensagem("Instância removida com sucesso");
			fecharModal("dialogExcluir");
			this.buscarInstancia();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover a Instância");
		}
	}
	
	public void buscarInstancia() {
		if (listaInstancia != null) {
			this.listaInstancia.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(instanciaBusca)) {
				this.listaInstancia =  logicaInstancia.buscarTodos(Instancia.class, "instancia");
			} else {
				this.listaInstancia = logicaInstancia.buscarPorCampo(Instancia.class, "instancia", instanciaBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.instancia.getInstancia())) {
			adicionarMensagem("O campo instância é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaInstancia(DefaultLogicaContract<Instancia> logicaInstancia) {
		this.logicaInstancia = logicaInstancia;
	}

	public List<Instancia> getListaInstancia() {
		return listaInstancia;
	}

	public void setListaInstancia(List<Instancia> listaInstancia) {
		this.listaInstancia = listaInstancia;
	}

	public String getInstanciaBusca() {
		return instanciaBusca;
	}

	public void setInstanciaBusca(String InstanciaBusca) {
		this.instanciaBusca = InstanciaBusca;
	}

	public Instancia getInstancia() {
		return instancia;
	}

	public void setInstancia(Instancia Instancia) {
		this.instancia = Instancia;
	}
	
	
}